Dans cette seconde partie de la section dédiée à la visualisation de données vous allez: - Changer l’apparence des graphiques - Combiner plusieurs graphiques dans une même figure - Inclure du dynamisme et de l’interactivité à vos graphique - Apprendre les meilleures pratique pour visualiser des données
Avant de rentrer dans le vif du sujet il nous faut mettre en place notre environnement de travail. Créez un nouveau script R et:
library(tidyverse)
session3_plots_manipulation:setwd("~/Desktop/2021_L3_R/session3_plots_manipulation/")
expt1 <- read_tsv("../data/burghardt_et_al_2015_expt1.txt")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## genotype = col_character(),
## background = col_character(),
## temperature = col_double(),
## fluctuation = col_character(),
## day.length = col_double(),
## vernalization = col_character(),
## survival.bolt = col_character(),
## bolt = col_character(),
## days.to.bolt = col_double(),
## days.to.flower = col_double(),
## rosette.leaf.num = col_double(),
## cauline.leaf.num = col_double(),
## blade.length.mm = col_double(),
## total.leaf.length.mm = col_double(),
## blade.ratio = col_double()
## )
Nous sommes maintenant prêt!
Tous les éléments d’un ggplot sont modifiables. Les thèmes permettent de modifier l’apparence du graphique. Voici quelques exemples.
# Example de thèmes existants dans ggplot2
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_bw() +
labs(title = "Black and white theme")
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_classic() +
labs(title = "Classic theme")
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Minimal theme")
La fonction theme() peut être utilisée pour modifier des éléments en particulier du graphique. Il y a tellement de possibilités que le mieux est de rechercher sur internet la modification que vous voulez faire.
Par exemple, en recherchant “vertical labels x axis ggplot2” nous obtenons cette solution:
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Rechercher “altering plot colours ggplot2” donne ceci, qui apporte cette solution:
ggplot(expt1, aes(genotype, days.to.flower, fill = fluctuation)) +
geom_boxplot() +
scale_fill_brewer(palette="Dark2")
Parfois nous voulons crée une figure contenant plusieurs graphiques, c’est le cas dans la plupart des articles scientifiques.
Par exemple le graphique que vous avez reproduit hier correspond aux panels B et C d’une figure de Burghard et al 2015
Nous allons faire quelque chose de similaire avec un scatterplot en panel A, et des boxplots en panel B.
Pour cela nous allons utiliser la fonction ggarrange() qui est dans le package ggpubr.
Tout d’abord, nous devons charger cette librairie dans R:
library(ggpubr)
Ensuite, faisons chaque graphique indépendamment et sauvons les dans un objet:
panelA <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point()
panelB <- ggplot(expt1, aes(genotype, days.to.bolt, fill = fluctuation)) +
geom_boxplot() +
facet_grid(. ~ temperature) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Nous pouvons maintenant utiliser la fonction grid.arrange() pour combiner les graphiques ensemble:
ggarrange(panelA, panelB, nrow=2, labels =c("A", "B"),heights = c(1.5, 2))
Si nous postons les graphiques en ligne, cela peut apporter un plus d’inclure une animation dans le graphique, à condition que cela apporte des informations supplémentaire. C’est possible avec le package gganimate!
Tout d’abord, chargeons le package gganimate:
library(gganimate)
Pour créer une animation, il faut utiliser la fonction transition_states() à notre graphique (avec un +)
ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point() +
transition_states(states = genotype, wrap = FALSE, transition_length = 1, state_length = 3) +
ease_aes('linear') +
labs(subtitle = "{closest_state}")
L’animation peut ensuite être sauvée en utilisant la fonction anim_save()
Pour aller plus loin, il est même possible de créer des graphiques interactifs en utilisant le package plotly.
library(plotly)
Il faut d’abord mettre le graphique dans un objet, puis utiliser cet objet dans la fonction ggplotly().
# Mettre le graphique dans l'objet p1
p1 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point() +
facet_wrap(~genotype)
# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p1)
Plutôt que d’avoir un graphique par génotype, il est possible d’ajouter un curseur pour montrer les données des génotypes de manière interaction en utilisant l’argument ‘frame’:
# Mettre le graphique dans l'objet p1
p2 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation, frame=genotype)) +
geom_point()
# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p2)
Utiliser le graphique approprié à nos données et répondant à notre question est essentiel. Cependant cela n’est pas toujours intuitif et dépend:
-Du nombre de variable à représenter. Voulez vous montrer une seule variable ou plusieurs? Et s’il y en a deux, voulez vous les comparer directement (dans le cas de nombres)
Comme il existe de nombreuses options, utilisez ce guide avec un arbre de décision pour choisir la meilleure méthode de visualisation
Discussion de groupe
Discutez avec votre voisin des deux types de graphique suivant.
Les avez vous déjà utilisé? Si oui, pour représenter quel type de données?
Sont ils appropriée à vos données et à votre question? Si non, quel autre type de graphique utiliseriez vous maintenant que vous savez utiliser ggplot?
1. Le camembert (pie chart)
Aidez vous de cette figure comparant des camemberts et des barplots montrant les mêmes données
source de l’image
2. Le barplot avec des barres d’erreur
Les barplots avec barre d’erreur permettent de représenter la moyenne d’une population (barplot) ainsi que la dispersion des données (barre d’erreur).
Mais est-ce idéal pour montrer nos données? Discutez en avec votre voisin en vous aidant de la figure ci-dessous extraite de Weissgerber et al., 2015.
De manière générale il est recommandé d’être au plus près des données quand nous réalisons des graphiques. - Choisissez de présenter toutes vos données, sans les modifier ou en supprimer une partie (si vous le faites, vous devez expliquer ce que vous avez fait et pourquoi).
Idéalement, et si cela se prête à votre question, montrez les données plutôt que des résumés. Choisissez des nuages de points plutôt que des barplots avec des barres d’erreur.
Toujours indiquer la taille des effectifs, soit en l’écrivant dans le graphique, soit en le rendant visible (nuage de point, densité etc)
Pour aller plus loin, nous allons regarder de plus prêt deux cas en particulier:
Pour rappel, le boxplot permet de montrer un bon résumé des données:
Cependant, faire un résumé des données peut cacher des informations:
Des alternatives existent pour représenter les données, afin d’éviter ces problèmes:
Si vous avez des données numériques avec des valeurs très éloignées de zéro il peut être tentant de ne pas faire commencer l’axe y à zéro mais plus proche de vos valeurs. Attention, cela peut cependant changer la conclusion!
Voici un exemple avec deux graphiques, l’un avec l’axe des y commençant à zéro et l’autre non. Le deuxième peut donner l’impression qu’il y a une grande différence entre les deux groupes, même si ce n’est pas forcement le cas.
De manière générale: - Si vous utilisez des barplot ou des points avec différentes catégories à comparer, faites commencer l’axe y à zéro. - Si vous utilisez des lignes (comme dans le cas de séries chronologiques), il n’est pas nécessaire de faire commencer l’axe des y à zéro. En effet ce type de graphique permet de montrer l’évolution d’une observation par exemple au cours du temps. Alors que les barplots sont utilisés pour montrer la différence entre deux (ou plusieurs) groupes
Si vous avez des données numériques avec certains points très éloignés des autres il peut être tentant de couper l’axe y entre les groupes de points. Ne le faites jamais!! Il existe d’autres alternatives comme par exemple utiliser une échelle logarithmique.
Comment bien faire ressortir le message des graphiques
Maintenant que nous avons vu les erreurs à éviter quand nous créons des graphique, passons aux méthodes permettant de bien faire ressortir le message des graphiques. Cela permettra de faciliter l’interprétation des graphique.
De manière générale, évitez de faire des graphiques trop compliqués avec des fioritures. Concentrez vous sur l’essentiel.
Voyons trois méthodes plus en détail:
1. Ordonner les données
Par défaut, R va ordonner les catégories de vos variable par ordre alphabétique. Sur excel, l’ordre des variable dans le tableau est utilisé. Cependant cet ordre n’est pas toujours optimal.
Vous pouvez changer l’ordre des catégories de vos variable sur R (nous verrons comment en séance 5). Voici quelques conseils pour bien choisir l’ordre dans lequel représenter les données.
Si vous comparez des données pour un (ou des) mutant à un wild type, ou si vous comparez un (ou plusieurs) traitement à un contrôle, commencez toujours par la référence, c.a.d le wild type ou le contrôle.
S’il n’y a pas de référence (wild type ou contrôle) et que vous voulez comparer différents conditions, dans ce cas ordonnez vos catégories en fonction de leur valeur, par exemple du plus grand au plus petit. Cela permettra facilement d’identifier les catégories avec les valeurs les plus grandes ou plus petites, ou les catégories avec des valeurs similaires. Voici un exemple d’un graphique avec des catégories non ordonnées, puis avec des catégories ordonnées. La version avec les catégories ordonnées est beaucoup plus facile à interprêter.
source des images
2. Eviter de mettre trop d’info dans un graph
3. Bien utiliser les couleurs (+ palette daltoniens)